<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Aria: teleopActionsExample.cpp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Aria
   &#160;<span id="projectnumber">2.9.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('teleopActionsExample_8cpp-example.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">teleopActionsExample.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<p>Example using actions for safe teleoperation with keyboard or joystick.This example program creates several "limiting" actions (stop the robot from hitting detected obstacles), as well as Joydrive and Keydrive actions which request movement based on keys pressed or a joystick attached to the computer. The limiting actions are added at a higher priority than the teleoperation actions, so they prevent those actions from driving the robot if nearby obstacles are detected; otherwise, you can drive the robot using they joystick or keyboard.</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;Aria.h&quot;</span></div><div class="line"></div><div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div><div class="line">{</div><div class="line">    <a name="a0"></a><a class="code" href="classAria.html#ad99c16b5d947229d9f8e1c5b2d4cdd73">Aria::init</a>();</div><div class="line">    <a name="_a1"></a><a class="code" href="classArArgumentParser.html">ArArgumentParser</a> parser(&amp;argc, argv);</div><div class="line">    parser.<a name="a2"></a><a class="code" href="classArArgumentParser.html#a501694b62a7f8b0c3cadd84aeafe1b35">loadDefaultArguments</a>();</div><div class="line">    <a name="_a3"></a><a class="code" href="classArRobot.html">ArRobot</a> robot;</div><div class="line">    <a name="_a4"></a><a class="code" href="classArRobotConnector.html">ArRobotConnector</a> robotConnector(&amp;parser, &amp;robot);</div><div class="line">    <span class="keywordflow">if</span>(!robotConnector.<a name="a5"></a><a class="code" href="classArRobotConnector.html#ab192ac393d9cc1e5b61b1a82b08d085d">connectRobot</a>())</div><div class="line">    {</div><div class="line">      <a name="a6"></a><a class="code" href="classArLog.html#a43a8b3789126c818f390f24bdbceccce">ArLog::log</a>(<a name="a7"></a><a class="code" href="classArLog.html#ac8cc0fb3aa323ab2a1c21340fdd1dce3a012daf6573594f91242f8dd7c02eb74b">ArLog::Terse</a>, <span class="stringliteral">&quot;teleopActionsExample: Could not connect to the robot.&quot;</span>);</div><div class="line">      <span class="keywordflow">if</span>(parser.<a name="a8"></a><a class="code" href="classArArgumentParser.html#ac3889cbdfa862031c51bf80e06954914">checkHelpAndWarnUnparsed</a>())</div><div class="line">      {</div><div class="line">          <a name="a9"></a><a class="code" href="classAria.html#a10d71f3d4d0cf7f38c58a1f749f64a42">Aria::logOptions</a>();</div><div class="line">          <a name="a10"></a><a class="code" href="classAria.html#a6abc3d39b3e9548063bb8e78375acc17">Aria::exit</a>(1);</div><div class="line">      }</div><div class="line">    }</div><div class="line">    <span class="keywordflow">if</span> (!<a name="a11"></a><a class="code" href="classAria.html#a1b090c01d88bb420b8cf8e0384d25ee1">Aria::parseArgs</a>() || !parser.<a class="code" href="classArArgumentParser.html#ac3889cbdfa862031c51bf80e06954914">checkHelpAndWarnUnparsed</a>())</div><div class="line">    {</div><div class="line">      <a class="code" href="classAria.html#a10d71f3d4d0cf7f38c58a1f749f64a42">Aria::logOptions</a>();</div><div class="line">      <a class="code" href="classAria.html#a6abc3d39b3e9548063bb8e78375acc17">Aria::exit</a>(1);</div><div class="line">    }</div><div class="line">    <a class="code" href="classArLog.html#a43a8b3789126c818f390f24bdbceccce">ArLog::log</a>(<a name="a12"></a><a class="code" href="classArLog.html#ac8cc0fb3aa323ab2a1c21340fdd1dce3a7040faf60eeb155eaa85d439b1066ca1">ArLog::Normal</a>, <span class="stringliteral">&quot;teleopActionsExample: Connected.&quot;</span>);</div><div class="line"></div><div class="line">  </div><div class="line">  <span class="comment">// limiter for close obstacles</span></div><div class="line">  <a name="_a13"></a><a class="code" href="classArActionLimiterForwards.html">ArActionLimiterForwards</a> limiter(<span class="stringliteral">&quot;speed limiter near&quot;</span>, 300, 600, 250);</div><div class="line">  <span class="comment">// limiter for far away obstacles</span></div><div class="line">  <a class="code" href="classArActionLimiterForwards.html">ArActionLimiterForwards</a> limiterFar(<span class="stringliteral">&quot;speed limiter far&quot;</span>, 300, 1100, 400);</div><div class="line">  <span class="comment">// limiter that checks IR sensors (like Peoplebot has)</span></div><div class="line">  <a name="_a14"></a><a class="code" href="classArActionLimiterTableSensor.html">ArActionLimiterTableSensor</a> tableLimiter;</div><div class="line">  <span class="comment">// limiter so we don&#39;t bump things backwards</span></div><div class="line">  <a name="_a15"></a><a class="code" href="classArActionLimiterBackwards.html">ArActionLimiterBackwards</a> backwardsLimiter;</div><div class="line">  <span class="comment">// the joydrive action</span></div><div class="line">  <a name="_a16"></a><a class="code" href="classArActionJoydrive.html">ArActionJoydrive</a> joydriveAct;</div><div class="line">  <span class="comment">// the keydrive action</span></div><div class="line">  <a name="_a17"></a><a class="code" href="classArActionKeydrive.html">ArActionKeydrive</a> keydriveAct;</div><div class="line">  </div><div class="line">  <span class="comment">// sonar device, used by the limiter actions.</span></div><div class="line">  <a name="_a18"></a><a class="code" href="classArSonarDevice.html">ArSonarDevice</a> sonar;</div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line">  printf(<span class="stringliteral">&quot;This program will allow you to use a joystick or keyboard to control the robot.\nYou can use the arrow keys to drive, and the spacebar to stop.\nFor joystick control press the trigger button and then drive.\nPress escape to exit.\n&quot;</span>);</div><div class="line"></div><div class="line">  <span class="comment">// if we don&#39;t have a joystick, let &#39;em know</span></div><div class="line">  <span class="keywordflow">if</span> (!joydriveAct.<a name="a19"></a><a class="code" href="classArActionJoydrive.html#aadc5a4816e3c69bb0c7b57f72bbadde5">joystickInited</a>())</div><div class="line">    printf(<span class="stringliteral">&quot;Do not have a joystick, only the arrow keys on the keyboard will work.\n&quot;</span>);</div><div class="line">  </div><div class="line">  <span class="comment">// add the sonar to the robot</span></div><div class="line">  robot.<a name="a20"></a><a class="code" href="classArRobot.html#a97d57b28549fdef851c00749a97cc776">addRangeDevice</a>(&amp;sonar);</div><div class="line"></div><div class="line"></div><div class="line">  <span class="comment">// set the robots maximum velocity (sonar don&#39;t work at all well if you&#39;re</span></div><div class="line">  <span class="comment">// going faster)</span></div><div class="line">  robot.<a name="a21"></a><a class="code" href="classArRobot.html#ad6a5d53606c9ba9c8c796f908e2fc1a1">setAbsoluteMaxTransVel</a>(400);</div><div class="line"></div><div class="line">  <span class="comment">// enable the motor</span></div><div class="line">  robot.<a name="a22"></a><a class="code" href="group__easy.html#gaa3657bebab0086dd14ed0c8c3f76dc8b">enableMotors</a>();</div><div class="line"></div><div class="line">  <span class="comment">// Add the actions, with the limiters as highest priority, then the teleop.</span></div><div class="line">  <span class="comment">// actions.  This will keep the teleop. actions from being able to drive too </span></div><div class="line">  <span class="comment">// fast and hit something</span></div><div class="line">  robot.<a name="a23"></a><a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;tableLimiter, 100);</div><div class="line">  robot.<a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;limiter, 95);</div><div class="line">  robot.<a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;limiterFar, 90);</div><div class="line">  robot.<a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;backwardsLimiter, 85);</div><div class="line">  robot.<a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;joydriveAct, 50);</div><div class="line">  robot.<a class="code" href="group__easy.html#ga9ab030786d423237d3e4aa06c0e9d8ce">addAction</a>(&amp;keydriveAct, 45);</div><div class="line"></div><div class="line">  <span class="comment">// Configure the joydrive action so it will let the lower priority actions</span></div><div class="line">  <span class="comment">// (i.e. keydriveAct) request motion if the joystick button is</span></div><div class="line">  <span class="comment">// not pressed.</span></div><div class="line">  joydriveAct.<a name="a24"></a><a class="code" href="classArActionJoydrive.html#a2d2e8053a6a49487c5dbeadcbcc44556">setStopIfNoButtonPressed</a>(<span class="keyword">false</span>);</div><div class="line"></div><div class="line">  </div><div class="line">  <span class="comment">// run the robot, true means that the run will exit if connection lost</span></div><div class="line">  robot.<a name="a25"></a><a class="code" href="classArRobot.html#a3c1c3056633caf455c8265259f57f6d7">run</a>(<span class="keyword">true</span>);</div><div class="line">  </div><div class="line">  <a class="code" href="classAria.html#a6abc3d39b3e9548063bb8e78375acc17">Aria::exit</a>(0);</div><div class="line">}</div></div><!-- fragment --> </div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>
